let golabelUrl = ""
// #ifdef APP-PLUS
if (plus.os.name == "Android") {
	golabelUrl = `file://storage/emulated/0/Android/data/${plus.android.runtimeMainActivity().getPackageName()}/`
}
// #endif
//安卓手机基础的路径是"file://storage/emulated/0",后面的就是在手机能看到的目录，可以自己定义，io.dcloud.HBuilder是uniapp真机调试路径，如果要打包使用，需要替换成打包的包名，例uni.UNI2611ED9
//写入数据
export function writeFile(dirEntry, content) { //dirEntry文件操作对象，content：要写入的内容
	return new Promise(resolve => {
		dirEntry.createWriter(function(writer) { //写入json数据
			writer.onwrite = function(e) {
				dirEntry.file((file) => {
					let fileReader = new plus.io.FileReader();
					fileReader.onloadend = function(evt) {
						resolve({
							code: 200,
							msg: "Write data success!",
							info: evt.target
								.result
						})
					}
					fileReader.readAsText(file, 'utf-8');

				});

			}
			writer.seek(0);
			writer.write(content);
		});
	})
}
//创建文件
export function createFile(fileName) {
	//fileName:是文件名称
	return new Promise(resolve => {
		//文件读写是一个异步请求 用promise包起来方便使用时的async+await
		plus.io.requestFileSystem(
			plus.io.PUBLIC_DOCUMENTS,
			fs => {
				fs.root.getFile(golabelUrl + fileName, {
					create: true
				}, fileEntry => {
					fileEntry.file((file) => {
						let fileReader = new plus.io.FileReader();
						fileReader.onloadend = function(evt) {
							console.log(evt)
							resolve({
								code: 200,
								msg: '创建' +
									file
									.name +
									'成功',
								obj: fileEntry,
								info: evt
									.target
									.result
							})
						}
						fileReader.readAsText(file, 'utf-8');

					});
				}, e => {
					resolve({
						code: 400,
						msg: "getFile failed: " + e.message,
					})
				});
			},
			e => {
				resolve({
					code: 400,
					msg: "getFile failed: " + e.message,
				})
			}
		);
	})
}
// 创建目录
function creatDirectory(dName, lastDname = '') { //dName:创建的目录名称,lastDname可选
	//path:手机基础路径，例file://storage/emulated/0/Android/data/io.dcloud.HBuilder/documents/下,dName:目录名称
	return new Promise(resolve => {
		plus.io.resolveLocalFileSystemURL(lastDname ? golabelUrl + lastDname : golabelUrl, function(
			entry) {
			entry.getDirectory(dName, {
				create: true,
				exclusive: false
			}, function(dir) {
				resolve({
					code: 200,
					msg: '创建' + dName + '目录成功'
				})
			}, function() {
				resolve({
					code: 400,
					msg: '创建' + dName + '目录失败',
					error: JSON.stringify(e)
				})
			});
		}, function(e) {
			resolve({
				code: 400,
				msg: '创建' + dName + '目录失败',
				error: JSON.stringify(e)
			})
		});
	})

}
//创建多级目录
function createMuchDirectory(arrDname) { //arrDname:目录数组,如想创建a/b/c多级目录，则['a','b','c']
	return new Promise(async resolve => {
		if (arrDname.length > 0) {
			let src = ""
			let i = 0
			while (i < arrDname.length) {
				if (i == 0) {
					src = ''
				} else {
					src += arrDname[i - 1] + '/'
				}
				let result = await creatDirectory(arrDname[i], src)
				if (result.code == 200) {
					console.log("下一级")
					i++
				} else {
					console.log("跳出")
					break;
				}
			}
			if (i == arrDname.length) {
				resolve({
					code: 200,
					msg: '创建多级目录成功',
					error: "无"
				})
			} else {
				resolve({
					code: 400,
					msg: '创建多级目录失败',
					error: "有目录创建失败"
				})
			}
		} else {
			resolve({
				code: 400,
				msg: '参数传递错误',
				error: "404"
			})
		}
	})

}
// 删除目录
function delDirectory(dName) { //dName:删除的目录名称
	return new Promise(resolve => {
		plus.io.resolveLocalFileSystemURL(golabelUrl + dName, function(entry) {
			entry.removeRecursively(function(entry) {
				console.log("删除目录成功!");
				resolve({
					code: 200,
					msg: '删除目录成功'
				})
			}, function(e) {
				resolve({
					code: 400,
					msg: '删除目录失败',
					error: JSON.stringify(e)
				})
			});
		}, function(e) {
			resolve({
				code: 400,
				msg: '删除目录失败',
				error: JSON.stringify(e)
			})
		});
	})
}
//创建下载任务
function createTask(netWorkSrc, dName) {
	//netWorkSrc:下载目标的网络地址链接，dName:是目录名称
	return new Promise(resolve => {
		let result
		let dtask = plus.downloader.createDownload(
			netWorkSrc, {
				//1.本地路径开头使用file://;
				//2.Android平台本地绝对路径为"storage/emulated/0",就是用户文件管理器能看到的了;
				//3.创建"xxx"作为文件夹名称，后缀是用于文件命名和格式修改，大家可以使用变量。
				filename: golabelUrl + dName + '/',
				//利用保存路径，实现下载文件的重命名,最后一个/后面可加变量，这个变量是下载后的文件名称要写后缀，这里我不写，默认使用原文件名
			},
			function(d, status) { //d为下载的文件对象;status下载状态
				if (status == 200) { //下载成功
					result = {
						code: 200,
						msg: '下载成功'
					}
					resolve(result)
					//d.filename是文件在保存在本地的相对路径，使用下面的API可转为平台绝对路径
					// let fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
					// console.log(fileSaveUrl, d.filename)
					// plus.runtime.openFile(d.filename); //选择软件打开文件
				} else { //下载失败
					plus.downloader.clear(); //清除下载任务
					result = {
						code: 400,
						msg: '下载失败'
					}
					resolve(result)
				}
			}
		);
		dtask.start(); //启用

	})

}
//查看目录下的某个指定文件
function getFileData(path) {
	//path:文件路径，前面需要加上'file://'
	return new Promise(resolve => {
		//文件读写是一个异步请求 用promise包起来方便使用时的async+await
		plus.io.requestFileSystem(
			plus.io.PUBLIC_DOCUMENTS,
			fs => {
				fs.root.getFile(path, {
					create: false
				}, fileEntry => {
					fileEntry.file((file) => {
						console.log("文件大小:" + file.size +
							'-- 文件名:' + file.name);
						//创建读取文件对象
						let fileReader = new plus.io.FileReader();
						//以文本格式读取文件数据内容
						fileReader.readAsText(file, 'utf-8');
						//文件读取操作完成时的回调函数
						fileReader.onloadend = (evt) => {
							console.log(JSON.parse(evt
									.target
									.result),
								'JSON.parse(evt.target.result)'
							)
							resolve({
								code: 200,
								msg: '获取信息成功',
								result: JSON
									.parse(
										evt
										.target
										.result
									)
							})
						}
					});
				}, e => {
					resolve({
						code: 400,
						msg: "getFile failed: " + e.message,
					})
				});
			},
			e => {
				resolve({
					code: 400,
					msg: "getFile failed: " + e.message,
				})
			}
		);
	})
}
//查看我们新建的目录下的所有文件
function getFileList(dName) {
	//dName:查询目录名称
	return new Promise((resolve) => {
		plus.io.resolveLocalFileSystemURL(golabelUrl + dName,
			function(entry) {
				var directoryReader = entry.createReader(); //获取读取目录对象
				directoryReader.readEntries(function(entries) { //历遍子目录即可.
						var entries_con = [];
						var i;
						if (entries.length > 0) {
							for (i = 0; i < entries.length; i++) {
								entries_con.push({
									name: entries[i].name,
									fullPath: entries[i].fullPath
								})
							}

						}
						resolve({
							code: 200,
							msg: '查询成功',
							data: [...entries_con]
						})
					},
					function(e) {
						resolve({
							code: 400,
							msg: '访问目录失败',
							error: JSON.stringify(e)
						})
					}
				);
			},
			function(e) {
				resolve({
					code: 400,
					msg: '访问目录失败',
					error: JSON.stringify(e)
				})
			}
		)
	})
}
//删除文件
function delFileList(dName, isDelete = false, fileName) {
	//dName:需要删除文件的父级目录名称，isDelete:是否全删,默认为false,fileName需要删除的文件名a.mp3等
	return new Promise((resolve) => {
		plus.io.resolveLocalFileSystemURL(golabelUrl + dName,
			function(entry) {
				var directoryReader = entry.createReader(); //获取读取目录对象
				directoryReader.readEntries(function(entries) { //历遍子目录即可.
						var entries_con = [];
						var i;
						if (isDelete) { //全删
							for (i = 0; i < entries.length; i++) {
								entries[i].remove();
							}
							resolve({
								code: 200,
								msg: '删除成功',
							})
						} else { //单删
							for (i = 0; i < entries.length; i++) {
								if (entries[i].name == fileName) {
									entries[i].remove();
								}
							}
							resolve({
								code: 200,
								msg: '删除成功',
							})
						}
					},
					function(e) {
						resolve({
							code: 400,
							msg: '访问目录失败',
							error: JSON.stringify(e)
						})
					}
				);
			},
			function(e) {
				resolve({
					code: 400,
					msg: '访问指定目录失败',
					error: JSON.stringify(e)
				})
			}
		)
	})
}
// 多文件拷贝
function multifileCopyFile(dName, targetFileName) {
	//dName:要拷贝的文件目录名称,targetFileName:要拷贝到的目标目录名称
	return new Promise((resolve) => {
		plus.io.resolveLocalFileSystemURL(golabelUrl + dName + '/', function(entry) {
			var f = entry.createReader();
			f.readEntries(async function(en) {
					var succeed = [] //成功拷贝的文件
					var failed = [] //失败文件
					for (let k = 0; k < en.length; k++) {
						var res = await copyFile(en[k].fullPath,
							golabelUrl + targetFileName);
						if (res.code == 200) {
							succeed.push(res.fullPath)
						} else {
							failed.push(res.fullPath)
						}
					}
					resolve({
						code: 200,
						msg: '成功与失败集合',
						succeedData: JSON.stringify(
							succeed),
						failedData: JSON.stringify(failed)
					})
				},
				function(e) {
					resolve({
						code: 400,
						msg: '读取路径失败',
						error: JSON.stringify(e)
					})
				});
		}, function(e) {
			resolve({
				code: 400,
				msg: '读取路径失败',
				error: JSON.stringify(e)
			})
		});
	})

}
// 单文件拷贝
function copyFile(file1, file2) {
	//file1:要拷贝的文件路径/a/b.mp3,file2:拷贝到哪个目录/a/b
	return new Promise((resolve) => {
		plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {
			fs.root.getFile(file1, {
				create: true
			}, function(fileEntry) {
				plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS,
					function(fs1) {
						fs.root.getDirectory(file2, {
							create: true,
							exclusive: false
						}, function(fileEntry1) {
							fileEntry.copyTo(
								fileEntry1,
								null,
								function(
									entry
								) {
									resolve
										({
											code: 200,
											msg: "拷贝文件成功",
											fullPath: entry
												.fullPath
										})
								},
								function(
									e) {
									resolve
										({
											code: 400,
											msg: '拷贝出错',
											fullPath: file1, //拷贝失败文件路径
											error: JSON
												.stringify(
													e
												)
										})
								});
						});
					});
			});
		});
	})
}
//压缩文件
function zipCompress(dName, newFileSrc) {
	//dName需要被压缩的目录名称,newFileSrc:压缩包存放的目录名称及压缩包名称，例new/12345678.zip
	return new Promise((resolve) => {
		plus.zip.compress(golabelUrl + dName + '/', golabelUrl + newFileSrc,
			function() {
				resolve({
					code: 200,
					msg: '压缩成功',
					fullPath: golabelUrl + newFileSrc
				})
			},
			function(error) {
				resolve({
					code: 400,
					msg: '压缩失败'
				})
			});
	})

}
let fileApi = {
	creatDirectory,
	delDirectory,
	createTask,
	getFileData,
	getFileList,
	delFileList,
	multifileCopyFile,
	copyFile,
	zipCompress,
	writeFile,
	createFile,
	createMuchDirectory,
	golabelUrl
}
export default fileApi